<?php
/**
 * Глобальный класс управления гостевыми книгами
 * 
 * @category Phorm
 * @package Resource
 * @name /Phorm/Resource/Gbooks.php
 * @copyright phorm.ru
 * @since 03.05.2012
 * @author vladimir@kachalov.net
 */

class Phorm_Resource_Gbooks extends Phorm_Resource {
	
	/**
	 * Id модуля
	 * @var string
	 */
	protected $_moduleid = 'gbooks';
	
	/**
	 * Конструктор
	 * 
	 * @return void
	 */
	
	public function __construct() {
		
		parent::__construct($this->_moduleid);
		
	}
	
	/**
	 * Возвращает список гостевых книг
	 * 
	 * @param array $opions Массив опций
	 * 
	 * @return array
	 */
	
	public function getGbooksList($options=array()) {
			
		if($select = $this->getResourcesList($options+array('moduleid'=>$this->_moduleid,'return_as'=>'select'))) {
			
			$select -> joinLeft(array('PP'=>'pw_resources_gbooks'),'AA.resourceid=PP.resourceid', 
								new Zend_Db_Expr('PP.*, (SELECT COUNT(*) FROM pw_resources_gbooks_entries WHERE resourceid=PP.resourceid) entries'))
					-> group('PP.resourceid');
								
			return $this->_db->fetchAll($select);
			
		} else {
			
			return false;
			
		}
			
	}
	
	
	/**
	 * Возвращает базовую информацию о гостевой книге (без привязки к таблице материалов сайта)
	 * 
	 * @param int $resourceid Id гостевой книги
	 * 
	 * @return array
	 */
		
	public function getGbookInfo($resourceid) {
		
		$select = $this->_db->select()
				-> from('pw_resources_gbooks')
				-> where('resourceid=?',$resourceid);
				
		if($row = $this->_db->fetchRow($select)) {
			if(!empty($row['themes'])) $row['themes'] = explode(PHP_EOL,$row['themes']);
			return $row;
		}
			
		return false;
			
	}
	
	
	/**
	 * Возвращает полную информацию о гостевой книге (с привязкой к таблице материалов сайта)
	 * 
	 * @param int $resourceid Id гостевой книги
	 * 
	 * @return array
	 */
		
	public function getFullGbookInfo($resourceid) {
		
		if($ResourceInfo = $this->getResourceInfo($resourceid, array('moduleid'=>$this->_moduleid))) {
			
			if($GbookInfo = $this->getGbookInfo($ResourceInfo["resourceid"])) {
				
				return $ResourceInfo + $GbookInfo;
				
			}
			
			return $ResourceInfo;
			
		}
		
		return false;
			
	}
	
	
	/**
	 * Возвращает список записей в гостевой книге
	 * 
	 * @param int $resourceid Id гостевой книги
	 * 
	 * @return array
	 */
		
	public function getEntriesList($resourceid) {
		
		$select = $this->_db->select()
				-> from(array('AA'=>'pw_resources_gbooks_entries'), new Zend_Db_Expr('SQL_CALC_FOUND_ROWS AA.*,BB.username,1 actions'))
				-> joinLeft(array('BB'=>'pw_users'),'AA.userid=BB.userid')
				-> order('AA.entryid DESC')
				-> where('AA.resourceid=?',$resourceid)
				-> limitPage($this->getCurrentPage(),$this->getPerPage());
			
		return $this->_db->fetchAll($select);
			
	}
	
	
	/**
	 * Возвращает информацию о записи в гостевой книге
	 * 
	 * @param int $entryid Id Записи
	 * 
	 * @return array
	 */
		
	public function getEntryInfo($entryid) {
		
		$select = $this->_db->select()
				-> from(array('AA'=>'pw_resources_gbooks_entries'))
				-> join(array('BB'=>'pw_resources'),'AA.resourceid=BB.resourceid',array('resourcename'))
				-> joinLeft(array('CC'=>'pw_users'),'AA.userid=CC.userid')
				-> where('AA.entryid=?',$entryid);
			
		return $this->_db->fetchRow($select);
			
	}
	
	
	/**
	 * Сохраняет данные формы. Дополнительный метод при сохранении материала
	 * Предполагается, что этот метод будет вызываться из self::saveResourceForm поэтому трансакция БД не инициализируется
	 *
	 * @param array $data Массив данных формы, возвращаемый методом saveResourceForm
	 * @see Phorm_Resource::saveResourceForm
	 * @return array | false
	 */
	
	protected function saveGbookInfo($data) {
		
		$result = false;
		
		if(isset($data['resourceid']) && $data['resourceid']>0) {
			
			/**
			 * Сохранение дополнительных параметров
			 * Выделяем из массива данных поля для вставки в основную таблицу pw_resources_gbooks
			 * Удаляем запись из таблицы и вставляем новую
			 */
			
			$maindata = $this->getFilteredValuesByTableCols('pw_resources_gbooks',$data);
			
			if(isset($maindata['themes']) && is_array($maindata['themes'])) {
				$maindata['themes'] = join(PHP_EOL,$maindata['themes']);
			}
			
			$this->_db->delete('pw_resources_gbooks','resourceid='.(int)$data['resourceid']);
			$this->_db->insert('pw_resources_gbooks',$maindata);
			
			$result = $data;
		
		}
		
		return $result;
		
	}
	
}